"""
函数的定义和使用

"""
#定义函数
#def是关键字，print_sayHi函数名， name是形参
def print_sayHi(name):
    print("Hello",name) #函数体

#使用函数
print_sayHi("Tony")

#默认参数
def f1(a,b=5,c=10):
    return a+b+c
res = f1(1)
print(res)# 1+ 5 + 10 = 16
res = f1(1,2,3)#如果在函数调用的时候，传递了实参，默认参无效
print(res)# 1+2 +3 =6

#位置参数
def f2(a,b,c):
    print("a:",a,"b:",b,"c:",c)
f2(1,2,3)#函数调用的时候，传递的参数和定义参数的顺序是一致的。默认
f2(c=10,a=11,b=12)#在函数调用的时候，利用参数名去指定参数的位置

#可变参数  参数实际上就是一个元组 （不可变的集合）
def f3(*args):
    print(type(args))
    sum = 0
    for num in args:
        sum += num
    return sum
print( f3(1,2,3,4,5,6,7,8)  )

#关键字参数
def f4(**kw):
    print(type(kw))
    if 'name' in kw:
        print('欢迎你%s' % kw['name'])
    elif 'tel' in kw:
        print('你的联系电话：%s' % kw['tel'])
    else:
        print("没有找到你的个人信息")

param = {'name':'张三','age':24,'tel':'188888888'}
f4(**param)
f4(user='张三',tel="18888888")


"""
作用域
    全局作用域  局部作用域
"""

def foo1():
    fa = 5  #局部变量，定义在函数里面的变量只能在该函数内起作用
    print(fa)

foo1()
#print(fa)

fb = 6 #全局变量， 定义在函数外的变量 在任意位置都可以调用
def foo2():
    print(fb)

foo2()


#将局部变量 改为全局变量 global
def foo4():
    global fc
    fc = 200
    print(fc)

foo4()
print(fc)